package controller;

import java.util.ArrayList;
import java.util.List;

import model.Comanda;
import model.ItemVenta;
import model.Venta;
import beans.ComandaBean;
import beans.ItemVentaBean;
import beans.VentaBean;
import dao.HibernateVentaDAO;
import dto.ItemVentaDTO;
import dto.VentaDTO;

public class AdministradorVenta {
	private static AdministradorVenta instancia;
	
	private AdministradorVenta(){
		
	}
	
	public static AdministradorVenta getInstancia(){
		if(instancia==null)
			instancia=new AdministradorVenta();
		return instancia;
	}

	public VentaBean fromModelTOBean(Venta venta) {
		VentaBean ventaBean=null;
		if(venta!=null){
		ventaBean=new VentaBean();
		ventaBean.setIdVenta(venta.getId());
		ventaBean.setNroMesa(venta.getNroMesa());
		ventaBean.setComandas(AdministradorComanda.getInstancia().fromModelTOBean(venta.getComandas()));
		ventaBean.setEstado(venta.getEstado());
		ventaBean.setMesas(AdministradorMesa.getInstancia().fromModelTOBean(venta.getMesas()));
		ventaBean.setMozo(AdministradorMozo.getInstancia().fromModelTOBean(venta.getMozo()));
		ventaBean.setItems(fromModelTOBeanItems(venta.getItems()));
		}
		return ventaBean;
	}

	public List<ItemVentaBean> fromModelTOBeanItems(List<ItemVenta> items) {
		List<ItemVentaBean> itemsb=new ArrayList<ItemVentaBean>();
		for (ItemVenta itemVenta : items) {
			ItemVentaBean itemb=fromModelTOBean(itemVenta);
			itemsb.add(itemb);
		}
		return itemsb;
	}
	
	public List<ItemVentaDTO> fromModelTODTOItems(List<ItemVenta> items) {
		List<ItemVentaDTO> itemsb=new ArrayList<ItemVentaDTO>();
		for (ItemVenta itemVenta : items) {
			ItemVentaDTO itemb=fromModelTODTO(itemVenta);
			itemsb.add(itemb);
		}
		return itemsb;
	}

	private ItemVentaBean fromModelTOBean(ItemVenta itemVenta) {
		ItemVentaBean itemb=null;
		if(itemVenta!=null){
			itemb=new ItemVentaBean();
			itemb.setIdItemVenta(itemVenta.getId());
			itemb.setCantidad(itemVenta.getCantidad());
			itemb.setEstado(itemVenta.getEstado());
			itemb.setItem(AdministradorPlato.getInstancia().fromModelTOBean(itemVenta.getItem()));
		}
		return itemb;
	}
	
	private ItemVentaDTO fromModelTODTO(ItemVenta itemVenta) {
		ItemVentaDTO itemb=null;
		if(itemVenta!=null){
			itemb=new ItemVentaDTO();
			itemb.setId(itemVenta.getId());
			itemb.setCantidad(itemVenta.getCantidad());
			itemb.setEstado(itemVenta.getEstado());
			itemb.setItem(AdministradorPlato.getInstancia().fromModelTODTO(itemVenta.getItem()));
		}
		return itemb;
	}

	public Venta fromDTOTOModel(VentaDTO ventaDTO) {
		Venta venta=null;
		if(ventaDTO!=null){
		venta=new Venta();
		venta.setId(ventaDTO.getId());
		venta.setNroMesa(ventaDTO.getNroMesa());
		venta.setComandas(AdministradorComanda.getInstancia().fromDTOTOModel(ventaDTO.getComandas()));
		venta.setEstado(ventaDTO.getEstado());
		venta.setMesas(AdministradorMesa.getInstancia().fromDTOTOModel(ventaDTO.getMesas()));
		venta.setMozo(AdministradorMozo.getInstancia().fromDTOTOModel(ventaDTO.getMozo()));
		venta.setItems(fromDTOTOModelItems(ventaDTO.getItems()));
		}
		return venta;
	}
	
	public List<ItemVenta> fromDTOTOModelItems(List<ItemVentaDTO> itemsDTO) {
		List<ItemVenta> items=new ArrayList<ItemVenta>();
		for (ItemVentaDTO itemVentaDTO : itemsDTO) {
			ItemVenta item=fromDTOTOModelItems(itemVentaDTO);
			items.add(item);
		}
		return items;
	}

	public ItemVenta fromDTOTOModelItems(ItemVentaDTO itemVentaDTO) {
		ItemVenta item=null;
		if(itemVentaDTO!=null){
			item=new ItemVenta();
			item.setId(itemVentaDTO.getId());
			item.setCantidad(itemVentaDTO.getCantidad());
			item.setEstado(itemVentaDTO.getEstado());
			item.setItem(AdministradorPlato.getInstancia().fromDTOTOModel(itemVentaDTO.getItem()));
		}
		return item;
	}

	public VentaDTO fromModelTODTO(Venta venta) {
		VentaDTO ventaDTO=null;
		if(venta!=null){
			ventaDTO=new VentaDTO();
			ventaDTO.setId(venta.getId());
			ventaDTO.setNroMesa(venta.getNroMesa());
			ventaDTO.setComandas(AdministradorComanda.getInstancia().fromModelTODTO(venta.getComandas()));
			ventaDTO.setEstado(venta.getEstado());
			ventaDTO.setMesas(AdministradorMesa.getInstancia().fromModelTODTO(venta.getMesas()));
			ventaDTO.setMozo(AdministradorMozo.getInstancia().fromModelTODTO(venta.getMozo()));
			ventaDTO.setItems(fromModelTODTOItems(venta.getItems()));
		}
		return ventaDTO;
	}

	public Venta fromBeanTOModel(VentaBean ventaBean) {
		Venta venta=null;
		if(ventaBean!=null){
		venta=new Venta();
		venta.setId(ventaBean.getIdVenta());
		venta.setNroMesa(ventaBean.getNroMesa());
		venta.setComandas(AdministradorComanda.getInstancia().fromBeanTOModel(ventaBean.getComandas()));
		venta.setEstado(ventaBean.getEstado());
		venta.setMesas(AdministradorMesa.getInstancia().fromBeanTOModel(ventaBean.getMesas()));
		venta.setMozo(AdministradorMozo.getInstancia().fromBeanTOModel(ventaBean.getMozo()));
		venta.setItems(fromBeanTOModel(ventaBean.getItems()));
		}
		return venta;
	}

	public List<ItemVenta> fromBeanTOModel(List<ItemVentaBean> itemsb) {
		List<ItemVenta> items=new ArrayList<ItemVenta>();
		for (ItemVentaBean itemVentaBean : itemsb) {
			ItemVenta item=fromBeanTOModel(itemVentaBean);
			items.add(item);
		}
		return items;
	}

	public ItemVenta fromBeanTOModel(ItemVentaBean itemVentaBean) {
		ItemVenta item=null;
		if(itemVentaBean!=null){
			item=new ItemVenta();
			item.setId(itemVentaBean.getIdItemVenta());
			item.setCantidad(itemVentaBean.getCantidad());
			item.setEstado(itemVentaBean.getEstado());
			item.setItem(AdministradorPlato.getInstancia().fromBeanTOModel(itemVentaBean.getItem()));
		}
		return item;
	}

	public List<VentaBean> fromModelTOBean(List<Venta> ventas) {
		List<VentaBean> ventasb=new ArrayList<VentaBean>();
		for (Venta venta : ventas) {
			VentaBean vb=fromModelTOBean(venta);
			ventasb.add(vb);
		}
		return ventasb;
	}


	public Venta getVenta(int nroMesa) {
		VentaBean vb= HibernateVentaDAO.getInstancia().getVenta(nroMesa);
		Venta venta=this.fromBeanTOModel(vb);
		return venta;
	}


	public List<Venta> fromBeanTOModelV(List<VentaBean> ventasb) {
		List<Venta>ventas=new ArrayList<Venta>();
		for (VentaBean ventab : ventasb) {
			Venta venta=fromBeanTOModel(ventab);
			ventas.add(venta);
		}
		return ventas;
	}

	public void updateVenta(Venta venta) {
		VentaBean vb=fromModelTOBean(venta);
		HibernateVentaDAO.getInstancia().updateVenta(vb);
		
		
	}

	public Comanda buscarComanda(Venta v) {
		VentaBean vb=this.fromModelTOBean(v);
		ComandaBean cb=HibernateVentaDAO.getInstancia().buscarComanda(vb);
		List<ComandaBean>comandasBean=new ArrayList<ComandaBean>();
		comandasBean.add(cb);
		Comanda c=AdministradorComanda.getInstancia().fromBeanTOModel(comandasBean).get(0);
		return c;
	}

	public List<Venta> fromDTOTOModel(List<VentaDTO> ventasDTO) {
		List<Venta> ventas= new ArrayList<Venta>();
		for (VentaDTO ventaDTO : ventasDTO) {
			Venta venta=fromDTOTOModel(ventaDTO);
			ventas.add(venta);
		}
		return ventas;
	}

	public List<VentaDTO> fromModelTODTO(List<Venta> ventas) {
		List<VentaDTO> ventasDTO=new ArrayList<VentaDTO>();
		for (Venta venta : ventas) {
			VentaDTO ventaDTO=fromModelTODTO(venta);
			ventasDTO.add(ventaDTO);
		}
		return ventasDTO;
	}

	public Venta buscarVenta(Venta venta) {
		VentaBean ab=fromModelTOBean(venta);
		ab=HibernateVentaDAO.getInstancia().buscarVenta(ab);
		return fromBeanTOModel(ab);
	}

	public ItemVenta buscarItemVenta(ItemVenta itemVenta) {
		ItemVentaBean ab=fromModelTOBeanItem(itemVenta);
		ab=HibernateVentaDAO.getInstancia().buscarItemVenta(ab);
		return fromBeanTOModel(ab);
	}

	public ItemVentaDTO fromModelTODTOItem(ItemVenta itemVenta) {
		ItemVentaDTO itemDTO=null;
		if(itemVenta!=null){
			itemDTO=new ItemVentaDTO();
			itemDTO.setId(itemVenta.getId());
			itemDTO.setCantidad(itemVenta.getCantidad());
			itemDTO.setEstado(itemVenta.getEstado());
			itemDTO.setItem(AdministradorPlato.getInstancia().fromModelTODTO(itemVenta.getItem()));
		}
		return itemDTO;
	}
	
	public ItemVentaBean fromModelTOBeanItem(ItemVenta itemVenta) {
		ItemVentaBean itemBean=null;
		if(itemVenta!=null){
			itemBean=new ItemVentaBean();
			itemBean.setIdItemVenta(itemVenta.getId());
			itemBean.setCantidad(itemVenta.getCantidad());
			itemBean.setEstado(itemVenta.getEstado());
			itemBean.setItem(AdministradorPlato.getInstancia().fromModelTOBean(itemVenta.getItem()));
		}
		return itemBean;
	}

	public void grabarVenta(Venta v) {
		VentaBean vb=fromModelTOBean(v);
		HibernateVentaDAO.getInstancia().grabarVenta(vb);
		
	}

	public Venta buscarUltimaVenta() {
		VentaBean vb=HibernateVentaDAO.getInstancia().buscarUltimaVenta();
		return fromBeanTOModel(vb);
	}

	public void merge(Venta v) {
		VentaBean vb=fromModelTOBean(v);
		HibernateVentaDAO.getInstancia().merge(vb);
		
	}


	
}
